From: Keir Fraser Date: Wed, 5 Aug 2009 11:04:39 +0000 (+0100) Subject: xend: fix memory leak resulting in long garbage collector runs X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~13528 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=f275a935a26169a69969b04ba268885ca028c54b;p=xen.git xend: fix memory leak resulting in long garbage collector runs In the method xen.xend.XendStateStore.XendStateStore.load_state and xen.xend.XendStateStore.XendStateStore.save_state the minidom objects used to load/save the current state of a device type, can't be freed by the python garbage collector after all references to the top node are cleared, because of cyclic references between the DOM nodes. So memory usage of xend increases after calling these methods. To solve this problem, the unlink() method must be called for a minidom object before the last reference to the top node is cleared (see python docs). This breaks the cyclic references, so the garbage collector can free these objects. Signed-off-by: juergen.gross@ts.fujitsu.com --- diff --git a/tools/python/xen/xend/XendStateStore.py b/tools/python/xen/xend/XendStateStore.py index 245463fd4d..74767260f8 100644 --- a/tools/python/xen/xend/XendStateStore.py +++ b/tools/python/xen/xend/XendStateStore.py @@ -147,6 +147,7 @@ class XendStateStore: cls_dict[val_name] = bool(int(val_text)) state[uuid] = cls_dict + dom.unlink() return state def save_state(self, cls, state): @@ -226,5 +227,5 @@ class XendStateStore: node.appendChild(val_node) open(xml_path, 'w').write(doc.toprettyxml()) - + doc.unlink()